დისკრეტული სტრუქტურების გაფართოვება: პროგრამული ენა ჰასკელი

Size: px
Start display at page:

Download "დისკრეტული სტრუქტურების გაფართოვება: პროგრამული ენა ჰასკელი"

Transcription

1 Tbilisis saxelmwifo universiteti zusti da sabunebismetyvelo mecnierebata fakulteti ინტერდისციპლინური (მათემატიკა, კომპიუტერული მეცნიერებები) ქვემიმართულება: მათემატიკური ლოგიკა და დისკრეტული სტრუქტურები bakalavriati დისკრეტული სტრუქტურების გაფართოვება: პროგრამული ენა ჰასკელი K. Doets, J. van Eijck. The Haskell Road to Logic, Maths and Programming. Texts in Computer Series, 2004; Website: haskell.org.; Graham Hutton.Programming in Haskell. 2005; Tutorials:Learn You a Haskell for Great Good! საფუძველზე ლექციათა კურსი revaz grigolia da tatianა kiseliova Tbilisi 2011

2 leqcia # 1 1 samusaos mizani enis interpretatoris Haskell-is musaobis unarebis atviseba. Haskell-is tipis enis safuzvlebze warmodgenis mireba. martivi funqciebis gansazrvris atviseba 2 Hugs-is interpretatortan musaobis safuzvlebi laboratoriuli samusaoebis Casatareblad gamoiyeneba Haskellis tipis enis interpretatori. arsebobs interpretatorebis ramodenime realizacia; warmodgenil kurssi gamoiyeneba interpretatori Hugs (es dasaxeleba aris sityvebis Haskell users Gofer system abreviatura, Gofer aris programirebis enis dasaxeleba, romelic iyo Haskell-is enis erterti winamorbedi). Hugs-is interpretatoris gasvebis Semdeg ekranze Cndeba dammusavebeli garemos dialoguri fanjara, avtomaturad itvirteba tipebis winaswar gansazrvris da standartuli funqciebis gansazrvris faili Haskell-is enaze (P relude.hs), da gamoiyvaneba standartuli SemoTavzeba samusaoze. am SemaTavazebas aqvs saxe P relude >; zogadad, > simbolos win gamoiyvaneba bolo CatvirTuli modulis saxeli. SemoTavazebis gamotanis Semdeg SeiZleba avkrifot enis gamosaxuleba an interpretatoris brzaneba. interpretatoris brzaneba gansxvavdeba Haskell-is gamosaxulebisgan imit, rom iwyeba simbolo oriwertilit (:). magalitad, interpretatoris brzanebaa : quit, romelis Sesrulebac iwvevs interpretatoris musaobis damtavrebas. interpretatoris brzanebebi SeiZleba Semokldes ert asomde. ase, rom, brzanebebi : quit da : q eqvivalenturia. brzaneba : set gamoiyeneba interpretatoris sxvadasxva ofciebis dasayeneblad. brzaneba :? -s gamohyavs interpretatoris yvela brzanebis sia. SemdgomSi Cven sxva brzanebebsac ganvixilavt. 1

3 3 tipebi Haskell enis programebi arian gamosaxulebebi, romelta gamotvlebs mivyavart mnisvnelobebamde. TiToeul mnisvnelobas aqvs tipi. intuiciurad, tipi SeiZleba gavigot rogorc gamosaxulebis dasasvebi mnisvnelobebis simravle. imisatvis, rom ganvsazrrot, ra tipi aqvs mocemul gamosaxulebas, sawiroa gamoviyenot interpretatoris brzaneba : type (an : t). amas garda, SesaZloa gamoviyenot brzaneba : set + t, rata interpretatorma avtomaturad dabewdos yoveli gamotvlili gamosaxulebis tipi. ena Haskell -is tipebs warmoadgens: tipebi Integer da Int - gamoiyeneba mteli ricxvebis warmosadgenad, amastan tipi Integer -is sigrze ar aris SezRuduli. tipebi F loat da Double gamoiyeneba namdvili ricxvebis warmosadgenad. tipi Bool Seicavs or mnisvnelobas: T rue da F alse da danisnulia logikuri gamosaxulebebis Sedegis warmosadgenad. tipi Char gamoiyeneba simboloebis warmosadgenad. tipebis saxelebi Haskell enasi yoveltvis iwyeba didi (mtavruli) asoebit. ena Haskell warmoadgens Zlier tipizirebul programirebis enas. miuxedavad amisa, xsir SemTxvevebSi programisti ar aris valdebuli ganacxados, Tu romel tips ekutvnis mis mier Semotanili cvladi. interpretators TviTon aqvs SesaZlebloba gamoiyvanos momxmareblis mier gamoyenebuli cvladis tipi. Tumca, Tu raime miznistvis sawiroa gamocxaddes, rom mnisvneloba ekutvnis romelirac tips, gamoiyeneba konstruqcia: cvladi :: tipi. Tu CarTulia interpretatoris ofcia +t, masin interpretatori amave formatsi dabewdavs mnisvnelobebs. qvemot moyvanilia interpretatortan musaobis sesia. igulisxmeba, rom teqsti mosawvevi P relude > -is Semdeg, Seyvanilia momxmareblis mier, xolo misi momdevno teqsti aris sistemis pasuxi. P relude >: set + t 2

4 P relude > 1 1 :: Integer P relude > :: Double P relude > a a :: Char P relude > T rue T rue :: Bool mocemuli oqmidan Cans, rom tipebi Integer, Double da Char -is mnisvenlobebi moicema igive wesebit, rogorc ena C -Si. tipebis sistemis ganvitarebisa da mkacri tipizaciis Sedegad Haskell enis programebi aris usafrtxo tipebis mixedvit. garantirebulia, rom Haskell enis swor programasi tipebi sworad gamoiyeneba. praqtikulad, es nisnavs, rom Haskell enaze programa Sesrulebisas ver gamoiwvevs Secdomas mexsierebis SeRwevadobaze (Access violation). aseve, garantirebulia, rom programasi cvladebis gamoyeneba sawyisi inicializebis garese ar moxdeba. amrigad, programasi mravali Secdomis arseboba mowmdeba kompilaciis etapze da ara Sesrulebis etapze. 4 aritmetika interpretatori Hugs SeiZleba gamoyenebuli iyos aritmetikuli gamosaxulebebis gamosatvlelad. amastan, SesaZloa gamoyenebuli iyos operatorebi: +,,, / (mimateba, gamokleba, gamravleba, gayofa) prioritetebis Cveulebrivi wesebit. amastan, Sei- Zleba gamoyenebuli iyos operatori (xarisxsi ayvana). amrigad, musaobis seans SeiZleba hqondes Semdegi saxe: P relude > :: Integer P relude > :: Integer P relude > :: Integer amastan, SeiZleba gamoviyenot standartuli matematikuri funqciebi sqrt (kvadratuli fesvi), sin, cos, exp da a.s. programirebis sxva enebisgan gansxvavebit, Haskell -Si funqciis gamoza- 3

5 xebisas ar aris aucilebeli argumentis frcxilebsi Casma. amrigad, SeiZleba martivad daiweros sqrt2, da ara sqrt(2). magaliti: P relude > sqrt :: Double P relude > 1 + sqrt :: Double P relude > sqrt :: Double P relude > sqrt (2 + 1) :: Double am magalitidan SeiZleba davaskvnat, rom funqciis gamozaxebas ufro marali prioriteti aqvs, vidre aritmetikul operaciebs, ase, rom gamosaxuleba sqrt interpretirdeba rogorc (sqrt 2) + 1, da ara rogorc sqrt (2 + 1). gamotvlebis zusti rigis misatiteblad sawiroa gamoyenebuli iyos fr- Cxilebi. funqciis gamozaxebas yoveltvis ufro marali prioriteti aqvs, vidre nebismier binarul operacias. sawiroa aseve arinisnos, rom programirebis bevri sxva enisgan gansxvavebit, mtelricxvebiani gamosaxuleba Haskell -ze gamoitvleba Tanrigebis SeuzRudavi ricxvit. (SeecadeT gamotvalot gamosaxuleba ) C enisgan gansxvavebit, sadac int tipis maqsimaluri mnisvneloba SezRudulia manqanis TanrigebriobiT (Tanamedrove manqanebze igi tolia = ), Haskell enasi tipma Integer -ma SeiZleba warmoadginos nebismieri sigrzis mteli ricxvi. 5 kortejebi zemot CamoTvlili martivi tipebis garda askell-si Sei- Zleba ganvsazrvrot Sedgenili tipis mnisvnelobebic. magalitad, sibrtyeze wertilebis mosacemad aucilebelia ori ricxvi, romlebic mat koordinatebs Seesabameba. ena Haskell -Si ricxvebis wyvili SeiZleba movcet ase: CamovTaloT komponentebi, gamovyot mzimeebit da avirot frcxilebsi: (5,3). ar aris aucilebeli, rom ricxvebis komponentebi iyos er- Tidaigive tipis. SeiZleba SevadginoT wyvili, romlis pirveli komponenti SeiZleba iyos striqoni, meore mteli ricxvi da a.s. 4

6 zogadad, Tu a da b Haskell enis nebismieri tipia, masin im wyvilis tipi, romelsic pirveli elementi ekutvnis tips a, xolo meore - tips b, arinisneba ase: (a, b). magalitad, wyvils (5, 3) aqvs tipi (Integer, Integer); wyvili (1, a) ekutvnis tips (Integer, Char). SeiZleba moviyvanot ufro rtuli magaliti: wyvili ((1, a), 1.2) ekutvnis tips ((Integer, Char), Double). SeamowmeT es interpretatoris sasualebit. yuradreba mivaqciot imas, rom Tumca Semdegi saxis konstruqciebi (1,2) da (Integer, Integer) msgavsad gamoiyureba, ena Haskell -Si isini arnisnaven sxvadasxva cnebebs. pirveli matgani warmoadgens mnisvnelobas, masin roca meore aris tipi. wyvilebtan samusaod ena Haskell -Si arsebobs svandartuli funqciebi f st da snd,romlebic, Sesabamisad, abruneben siis pirvel da meore elementebs. am funqciebis dasaxeleba warmosobilia inglisuri sityvebidan f irst (pirveli) da second (meore). amrigad, isini SeiZleba gamoviyenot Semdegnairad: P relude > fst(5, T rue) 5 :: Integer P relude > snd(5, T rue) T rue :: Bool analogiurad, garda wyvilebisa, SeiZleba ganvsazrvrot sameulebi, otxeulebi da a.s. mati tipebi Caiwereba Sesabamisi saxit: P relude > (1, 2, 3) (1, 2, 3) :: (Integer, Integer, Integer) P relude > (1, 2, 3, 4) (1, 2, 3, 4) :: (Integer, Integer, Integer, Integer) monacemebis aset struqturas uwodeben kortejs. korte- JSi SeiZleba Senaxuli iyos fiqsirebuli raodenobis sxvadasxva monacemi. funqciebi f st da snd gansazrvrulia mxolod wyvilebistvis da ar musaobs sxva kortejebtan. Tu mat gamoviyenebt, magalitad, sameultan, interpretatori Segvatyobinebs Secdomis Sesaxeb. kortejis elementi SeiZleba iyos nebismieri tipis, mat Soris sxva kortejic. im kortejis elementebtan wvdomistvis, romlebic wyvilebs warmoadgenen, SeiZleba gamoviyenot f st 5

7 da snd funqciebis kombinacia. Semdegi magaliti gvicvenebs a elemetis amorebas kortejidan (1, ( a, 23.12)) : P relude > fst(snd(1, ( a, 23.12))) a :: Char 6 siebi kortejisagan gansxvavebit, siam SeiZleba Seinaxos elementebis nebismieri raodenoba. ena Haskell -Si sia ganisazrvreba ase: kvadratul frcxilebsi CamoiTvleba elementebi da ertmanetisgan mzimit gamoiyofa. elementebi aucileblad unda ekutvnodes ertidaigive tips. siis tipi, romelic Sedgeba a tipis elementebisgan, arinisneba rogorc [a]. P relude > [1, 2] [1, 2] :: [Integer] P relude > [ 1, 2, 3 ] [ 1, 2, 3 ] :: [Char] siasi SeiZleba arcerti elementi ar Sediodes. carieli sia arinisneba rogorc []. operatori : (ori wertili) gamoiyeneba siis TavSi elementis dasamateblad. misi marcxena argumenti unda iyos elementi, marjvena - sia: P relude > 1 : [2, 3] [1, 2, 3] :: [Integer] P relude > 5 : [1, 2, 3, 4, 5] [5, 1, 2, 3, 4, 5] :: [Char] P relude > F alse : [] [F alse] :: [Bool] operatori (:) da carieli siisgan SeiZleba avagot nebismieri sia: P relude > 1 : (2 : (3 : [])) [1, 2, 3] :: Integer operatori (:) marjvnidan asociatiuria, amitom zemot moyvanil gamosaxulebasi SeiZleba gamovtovot frcxilebi: 6

8 P relude > 1 : 2 : 3 : [] [1, 2, 3] :: Integer siis elementebi SeiZleba iyos nebismieri mnisvnelobebi - ricxvebi, simboloebi, kortejebi, sxva siebi da a.s. P relude > [(1, a ), (2, b )] [(1, a ), (2, b )] :: [(Integer, Char)] P relude > [[1, 2], [3, 4, 5]] [[1, 2], [3, 4, 5]] :: [[Integer]] ena Haskell -Si siebtan samusaod arsebobs funqciata didi raodenoba. Cven mxolod zogiert matgans ganvixilavt. funqcia head abrunebs siis pirvel elements. funqcia tail abrunebs sias pirveli elementis garese. funqcia length abrunebs siis sigrzes. funqciebi head da tail gansaxrvrulia aracarieli siebistvis. im SemTxvevaSi, Tu isini gamoiyeneba cariel siebtan, interpretators gamoaqvs Setyobineba Secdomis Sesaxeb. am funqciebtan musaobis magalitebia: P relude > head[1, 2, 3] 1 :: Integer P relude > tail[1, 2, 3] [2, 3] :: [Integer] P relude > tail[1] [] :: Integer P relude > length[1, 2, 3] 3 :: Int SevniSnoT, rom funqcia length ekutvnis tips Int da ara Integer -s. siebis gaertianebistvis (konkatenaciistvis) Haskell -Si gansazrvrulia operatori ++. P relude > [1, 2] + +[3, 4] [1, 2, 3, 4] :: Integer 7

9 7 striqonebi striqonuli mnisvnelobebi ena Haskell -Si, iseve rogorcc P relude > hello hello :: String striqoni warmoadgens simboloebis sias. ase, rom gamosaxulebebi hello, [ h, e, l, l, o ] da h : e : l : l : o : [ ] arnisnavs erti da imaves, xolo tipi String warmoadgens [Char] -is sinonims. yvela funqcia, romelic musaobs siebtan, Sei- Zleba gamoviyeniot stroqonebtanac: P relude > head hello h :: Char P relude > tail hello hello :: [Char] P relude > length hello 5 :: Int P relude > hello + +, world hello, world :: [Char] ricxviti mnisvnelobebis gardaqmnistvis striqonebad da piriqit, arsebobs funqciebi read da show: P relude > show 1 1 :: [Char] P relude > F ormula + +show 1 F ormula1 :: [Char] P relude > 1 + read :: Integer im SemTxvevaSi, Tu funqcia show ver gardaqmnis striqons ricxvad, gamodis Secdoma. 8 funqciebi Cven aqamde viyenebdit ena Haskell -is standartul funqciebs. vnaxot, rogor SeiZleba ganisazrvros momxmareblis funq- 8

10 ciebi. ganvixilot interpretatoris ramdenime brzaneba (gavixsenot, rom SesaZlebelia am brzanebebis Semokleba ert asomde). brzaneba : load sasualebas izleva CaitvirTos Haskell programa mocemuli failidan. brzaneba : edit usvebs bolo CatvirTuli failis redaqtirebis process. brzaneba : reload Tavidan kitxulobs bolos CatvirTul fails. momxmareblis mier gansazrvruli funqcia unda iyos failsi, romelic CaitvirTeba Hugs interpretatorit brzaneba : load -is sasualebit. CatvirTuli failis redaqtirebistvis Sei- Zleba gamoviyenot brzaneba : edit. is gausvebs gare redaqtors (SeTanxmebis principit - es aris N otepad). redaqtirebis procesis damtavrebis Semdeg aucilebelia davxurot redatori. Tumca, faili SeiZleba SevcvaloT usualod W indows operaciuli sistemis garsidan. am SemTxvevaSi, imistvis rom interpretatorma Tavidan waikitxos faili, sawiroa cxadad gamovizaxot brzaneba : reload. ganvixilot magaliti. SevqmnaT romelirac katalogsi faili lab1.hs. davusvat, am failis sruli gzaa - :\labs\lab1.hs. Hugs interpretatorsi SevasruloT Semdegi brzaneba: Prelude>:load "c:\\labs\\lab1.hs" Tu CatvirTva warmatebit damtavrda, interpretatoris mosawvevi icvleba Main > -it. saqme imasia, rom Tu ar mivu- TiTebT modulis saxels, itvleba, rom is aris M ain. Main>:edit aq unda gaixsnas redaqtoris fanjara, romelsic unda SevitanoT programis teqsti. SevitanoT: x = [1,2,3] SevinaxeT faili da davxurot redaqtori. interpretatori Hugs CatvirTavs fails :\labs\lab1.hs da exla x cvladis mnisvneloba iqneba gansazrvruli: 9

11 Main>x [1,2,3] :: [Integer] yuradreba mivaqciot, rom failis saxelis Cawerisas : load brzanebis argumentsi sombolo \ dublirdeba. iseve, rogorc ena C -Si, ena Haskell -Sic simbolo \ it iwyeba mosamsaxure simboloebi ( \n da a.s.). TviTon simbolo \ is gamoyenebistvis sawiroa kidev erti \ is mititeba, iseve, rogorc C enasia. gadavidet funqciis gansazrvraze. zemot arwerili procesis Sesabamisad SevqmenaT raime faili da CavweroT massi Semdegi teqsti: square :: Integer -> Integer square x = x * x pirveli striqoni square (square :: Integer > Integer) miu- TiTebs, rom Cven Semogvaqvs funqcia square s gansazrvreba, romlis parametria Integer tipis da abrunebs Integer tipis mnisvnelobas. meore striqoni (square x = x x) warmoadgens usualod funqciis arweras. funqcia square Rebulobs ert arguments da abrunebs mis kvadrats. funqciebi ena Haskell Si warmoadgenen pirveli klasis mnisvnelobebs. es nisnavs, rom isini arian Tanabaruflebiani iseti mnisvnelobebis, rogoricaa mteli da namdvili ricxvebi, simboloebi, striqonebi, siebi da a.s. funqciebi SeiZleba gadaeces sxva funqciebs argumentad, dabrundes rogorc mnisvnelobebi da a.s. iseve rogorc yvela mnisvnelobas Haskell Si, funqciasa aqvs tipi. funqciis tipi, romelic irebs a tipis mnisvnelobas da abrunebs b tipis mnisvnelobas, arinisneba ase: a > b. Seqmnili faili CavtvirToT interpretatorsi da SevasruloT Semdegi brzanebebi: Main>:type square square :: Integer -> Integer Main>square 2 4 :: Integer SevniSnoT, rom square funqciis tipis gamocxadeba ar iyo aucilebeli: interpretators TviTon SeuZlia aucilebeli informaciis gamoyvana funqciis tipis Sesaxeb misi arweridan. Tumca, jer erti, gamoyvanili tipi iqneboda ufro didi, 10

12 vidre Integer > Integer, meorec, Haskell enaze programirebisas funqciis tipis cxadad mititeba itvleba karg tonad, radganac tipis gamocxadeba emsaxureba rarac azrit funqciis dokumentacias da exmareba programirebis Secdomebis gamovlenas. momxmareblia mier gansazrvruli funqciebisa da cvladebis saxelebi unda iwyebodes patara (qveda registris) latinuri asoebit. saxelebsi sxva simboloebi SeiZleba iyos didi an patara latinuri asoebi, cifrebi an simbolo _ da (xazgasma da apostrofi). ase, rom qvemot CamoTvlilia cvladebis swori saxelebi: var var1 variablename variable_name var 9 pirobiti gamosaxulebebi ena Haskell Si funqciis gansazrvrebisas SesaZlebelia gamoyenebuli iyos pirobiti gamosaxulebebi. CavweroT funqcia signum, romelic Tvlis gadacemuli argumentis nisans: signum :: Integer -> Integer signum x = if x > 0 then 1 else if x < 0 then -1 else 0 pirobiti gamosaxuleba Caiwereba ase: if piroba then gamosaxuleba else gamosaxuleba. yuradreba gavamaxvilot imaze, rom Tumca garegnulad es gamosaxuleba hgavs C an P ascal enebis operators, ena Haskell Si aucileblad unda iyos rogorc then, aseve else nawilebi. gamosaxulebebi pirobiti operatoris then da else nawilebsi aucileblad ertidaigive tipis unda iyos. piroba pirobiti operatoris gansazrvrebasi warmoadgens nebismier Bool is tipis gamosaxulebas. aseti gamosaxulebebis magalitad gamodgeba Sedareba. Sedarebisas SeiZleba gamoviyenot Semdegi operatoebi: 11

13 <, >, <=, >= am operatorebs igive azri aqvt, rac ena C -Si (naklebia, metia, naklebia da tolia, metia da tolia). == tolobaze Sedarebis operatori. /= utolobaze Sedarebis operatori. Bool is tipis gamosaxulebebi SeiZleba gavaertianot logikuri funqciebit && da ( da da an ), da uaryofis funqciit not. dasasvebi pirobebis magalitebia: x >= 0 && x <= 10 x > 3 && x /= 10 (x > 10 x < -10) && not (x == y) ra Tqma unda, SesaZlebelia ganvsazrvrot funqciebi, romlebic abruneben Bool is tipis mnisvnelobebs da gamoviyenot isini pirobebad. magalitad, SesaZlebelia ganvsazrvrot funqcia isp ositive, romelic abrunebs T rue s, Tu misi argumenti aris arauaryofiti da F alse winaarmdeg SemTxvevaSi: ispositive :: Integer -> Bool ispositive x = if x > 0 then True else False exla funqia signum SeiZleba ganisazrvros Semdegnairad: signum :: Integer -> Integer signum x = if ispositive x then 1 else if x < 0 then -1 else 0 SevniSnoT, rom funqcia isp ositive SeiZleba ganisazrvros ufro martivad: ispositive x = x > 0 10 mravalcvladiani funqciebi da funqciebis gansazrvris rigi aqamde Cven ganvsazrvravdit ertargumentian funqciebs. ra Tqma unda, askell enasi SesaZlebelia ganvsazrvrot funq- 12

14 ciebi, romlebic ireben nebismieri ricxvis argumentebs. funqcia add is gansazrvras, romelic irebs or mtel ricxvs da abrunebs mat jams, aqvs saxe: add :: Integer -> Integer -> Integer add x y = x + y funqcia add is tipi gamoiyureba ucnaurad. Haskell enasi itvleba, rom operacia asociatiuria marjvnidan. ase, rom add funqciis tipi SeiZleba ase wavikitxot Integer (Integer Integer), anu karirebis wesebis mixedvit, add funqciis gamoyenebis Sedegi ert argumenttan iqneba funqcia, romelic miirebs Integer tipis ert parametrs. sazogadod, funqciis tipi, romelic Rebulobs n arguments, romlebic ekutvnis t1, t2,..., tn, tipebs da abrunebs a tipis Sedegs, Caiwereba saxit t1 t2... tn a. sawiroa gavaketot kidev erti SeniSvna funqciebis gansazrvris rigis Sesaxeb. wina paragrafsi Cven ganvsazrvret ori funqcia signum da isp ositive, amatgan erti matgani iyenebda Tavis gansazrvrebasi meores. ismis kitxva, romeli matgani unda ganisazrvros adre? TiTqosda isp ositive is gansazrvreba unda uswrebdes signum is gansazrvrebas, magram Haskell enasi funqciebis gansazrvris rigs ar aqvs mnisvneloba! ase, rom funqcia isp ositive SeiZleba ganisazrvros rogorc signum funqciis gansazrvramde, ise mis Semdeg. 11 laboratoriuli davalebebi moiyvanet aratrivialuri gamosaxulebebis magalitebi, romlebic ekutvnis tipebs: 1. ((Char, Integer), String, [Double]) 2. [(Double, Bool, (String, Integer))] 3. ([Integer], [Double], [(Bool, Char)]) 4. [[[(Integer, Bool)]]] 5. (((Char, Char), Char), [String]) 13

15 6. (([Double], [Bool]), [Integer]) 7. [Integer, (Integer, [Bool])] 8. (Bool, ([Bool], [Integer])) 9. [([Bool], [Double])] 10. [([Integer], [Char])] am magalitis motxovna gamosaxulebebis aratrivialurobis Sesaxeb nisnavs, rom gamosaxulebebsi monawile siebi unda Seicavdnen ert elementze mets. 2. gansazrvret Semdegi funqciebi: 1) funqcia max3, romelic sami mteli ricxvidan abrunebs mat Soris udidess. 2) funqcia min3, romelic sami mteli ricxvidan abrunebs mat Soris umciress. 3) funqcia sort2, romelic ori mteli ricxvidan abrunebs wyvils, romelsic pirvel adgilas dgas am ori ricxvidan umciresi, meoreze ki udidesi. 4) funqcia botht rue :: Bool > Bool > Bool, romelic abrunebs T rue s, masin da mxolod masin, roca orive argumenti aris T rue. funqciis gansazrvrisatvis ar gamoiyenot logikuri operaciebi (&&, da a.s.) 5) funqcia solve2 :: Double > Double > (Bool, Double), romelic ori ricxvis mixedvit, romlebic warmoadgenen ax + b = 0 wrfivi gantolebis koeficientebs, abrunebs wyvils, romlis pirveli elementi aris T rue, Tu arsebobs amonaxsni da F alse winaarmdeg SemTxvevaSi; wyvilis meore elementi ki aris an fesvis mnisvneloba, an ) funqcia isp arallel, romelic abrunebs T rue s, Tu ori monakveti, romlebic warmoadgenen funqciis argumentebs, aris paraleluri (an devs ert wrfeze). magalitad, mnisvneloba gamosaxulebisa isp arallel (1, 1)(2, 2)(2, 0)(4, 2) aris T rue, vinaidan monakvetebi (1, 1) (2, 2) da (2, 0) (4, 2) paraleluria. 7) funqcia isincluded, romlis argumentebia sibrtyeze ori wrewiris parametrebi (centris koordinatebi da radiusebi); funqcia abrunebs T rue s, Tu meore wrewiri mtlianad Tavsdeba pirvelis SigniT. 14

16 8) funqcia isrectangular, romelic parametrad Rebulobs sibrtyeze sami wertilis koordinatebs da abrunebs T rue s, Tu mat mier Sedgenili samkutxedi aris martkutxa samkutxedi. 12 sakontrolo SekiTxvebi 1. rit gansxvavdeba interpretatoris brzanebebi Haskell is gamosaxulebebisgan? 2. ena Haskell is ZiriTadi tipebi. 3. kortejebtan musaobis funqciebi. 4. siebtan musaobis funqciebi. 5. cvladebisa da funqciebis dasasvebi saxelebi. 6. interpretatoris brzanebebi programebis failebtan samusaod. 7. pirobiti gamosaxulebebi ena Haskell Si. 8. funciebis gansazvreba ena Haskell Si 15

17 leqcia # 2 1 samusaos mizani rekursiuli funqciebis gansazrvra. nimustan Sedarebis meqanizmis gacnoba. siebtan musaobis unar Cvevebis SeZena. 2 komentarebi cxadia, rom aucilebelia programasi komentarebis arseboba. Haskell enasi, iseve, rogorc C + + Si, arsebobs ori tipis komentari: striqonuli da blokis. striqonuli komentari iwyeba simboloebit da grzeldeba striqonis bolomde. analogiurad, C + + Si striqonuli komentari iwyeba // simboloebit. blokuri komentari iwyeba simboloebit { da grzeldeba simboloebamde }. analogiurad, C + + Si komentarebi SemosazRvrulia simboloebit / da /. igulisxmeba, rom komentari ignorirdeba askell interpretatoris mier. magalitad, fx = x es aris komentari gxy = {- esec komentaria, mxolod grzeli komentaria - } x + y 3 rekursia programirebis imperatiul enebsi ZiriTad konstruqcias warmoadgens cikli. ena askell Si ciklebis nacvlad gamoiyeneba rekursia. funqcias ewodeba rekursiuli, Tu is izaxebs Tavis Tavs (anu, ufro zustad, gansazrvrulia Tavisive terminebsi). 1

18 rekursiuli funqciebi arsebobs imperatiul enebsic, magram ase fartod ar gamoiyeneba. ert erti rekursiuli funqcias warmoadgens faqtoriali: factorial :: Integer -> Integer factorial n = if n == 0 then 1 else n * factorial (n - 1) (SevniSnoT, rom Cven vwert factorial (n 1) da ara factorial n1 operaciebis prioritetebis Sesabamisad.) rekursiis gamoyenebam SeiZleba gamoiwvios sirtuleebi. rekursiis koncefcia Segvaxsenebs induqciuri damtkicebis xerxs, romelic matematikasi gamoiyeneba. faqtorialis ganmartebasi gamovyavit induqciis baza (SemTxveva n == 0) da induqciis biji (gadasvla f actorial n-dan f actorial (n 1) -ze). am komponentebis gamoyofa mnisvnelovani nabijia rekursiuli funqciebis gansazrvrisas. 4 amorcevis operacia da gamartvis wesebi Cven ukve ganvixilet n == 0 pirobiti operatori. exla ganvixilot amorcevis operatori case, romelic aris ena C-is switch konstruqciis analogi. davusvat, sawiroa funqciis gansazrvra, romelic abrunebs 1-s, Tu mas gadavcemt arguments 0-s; 5-s, Tu argumenti tolia 1; 2-s, Tu argumenti tolia 2-is da 1-s, yvela sxva SemTxvevaSi. ra Tqma unda, am funqciis Cawera operatori if-is sasualebitac aris Sesa- Zlebeli, Tumca gansazrvreba iqneba grzeli da bundovani. aset SemTxvevebSi gamoiyeneba case: f x = case x of 0 -> 1 1 -> 5 2 -> 2 _ -> -1 moyvanili magalitidan cxadia case operatoris sintaqsi. SevniSnoT, rom simbolo aris ena C-is default konstruqciis analogi. Tumca, unda ganisazrvros wesebi, rogor arkvevs ena Haskell-is interpretatori, Tu sad iwyeba erti SemTxveva da sad - meore. 2

19 ena Haskell-Si arsebobs teqstis struqturirebis organzomilebiani sistema (analoguri sistema gamoiyeneba far- Tod gavrcelebul ena P ython-sic). es sistema izleva sasualebas ar gamoviyenot specialuri simboloebi operatorebis gaertianebistvis, magalitad, isetebi, rogoricaa {, } da : ena C-Si. sinamdvilesi, ena Haskell-Sic SeiZleba am simboloebis gamoyeneba igive azrit. zemot moyvanili gansazrvreba SeiZleba asec Caiweros: f x = case x of { 0 -> 1; 1 -> 5; 2 -> 2; _ -> -1 } aseti Cawera cxadad gansazrvravs operatorebis dajgufebas, Tumca SeiZleba mat garesec. zogadi wesebi asetia: gasarebi sityvebis where, let, do da of Semdeg interpretatori svams gaxsnil frcxils ({) da imaxsovrebs svets, romelsic Semdegi brzaneba aris Cawerili. SemdgomSi, yoveli axali striqonis win, romelic gasworebulia damaxsovrebuli sididit, Caismeba gamyofi simbolo ;. Tu Semdegi striqoni naklebad aris gasworebuli (anu misi pirveli simbolo aris damaxsovrebuli poziciis marcxniv), masin Caismeba daxuruli frcxili (}). Tu am wess gamoviyenebt zemot arweril f funqciastan, mivirebt, rom interpretatori ariqvams mas Semdegnairad: f x = case x of{ ;0 -> 1 ;1 -> 5 ;2 -> 2 ;_ -> -1 } nebismier SemTxvevaSi SeiZleba cxadad miutitot simboloebi {, } da ;, Tumca am dros teqsti naklebad wakitxvadia da mat gamoyenebas laboratoriul mecadinoebebze ar gircevt. kidev erti SeniSvna. vinaidan Haskell enis programistvis cariel ujredebs aqvt mnisvneloba, amitom sawiroa yuradreba tabulaciis simbolostanac. interpretatori Tvlis, rom tabulaciis simbolo tolia 8 carieli ujredisa (simbolosi). Tumca, zogierti teqsturi redaqtori izleva tabulaciis 3

20 simbolos gansazrvris sasualebas da xdis mas sxva ricxvis tolad (magalitad, V isualstudio- redaqtorsi gacumebis principit tabulacia aris 4 carieli ujredi (simbolo)). aman SeiZleba gamoiwviot Secdomebi, amitomac sjobs ena Haskellze programirebisas ar gamoiyenot tabulaciis simboloebi. 5 uban-uban mocemuli funqciebi funqcia SeiZleba ganisazrvros uban-uban. es nisnavs, rom funqciis erti versia SeiZleba ganisazrvros gansazrvruli parametrebistvis, meore versia - sxva parametrebistvis. ase, rom wina paragrafsi moyvanili f funqcia SeiZleba ganisazrvros Semdegnairadac: f 0 = 1 f 1 = 5 f 2 = 2 f _ = -1 am SemTxvevaSi mnisvneloba aqvs funqciis gansazrvris rigs. Tu Cven Tavdapirvelad CavwerT gansazrvrebas f _ = -1, masin f funqcia daabrunebs mnisvnelobas 1-s nebismieri argumentistvis. Tu am striqons saertod ar mivutitebt, mivirebt Secdomas argumentistvis, romelic ar aris toli 0-is, 1- is an 2-is. funqciis gansazrvris aseti ssualeba xsirad gamoiyeneba askell-si. is nawilobriv izleva sasualebas ar gamoviyenot operatorebi if da case. ase, rom funqcia faqtoriali SeiZleba ganisazrvros aseti stilitac: factorial 0 = 1 factorial n = n * factorial (n - 1) 6 nimustan Sedareba iseve, rogorc SesaZlebelia rekursiuli funqciebi ganisazrvros mtel ricxvebze, aseve SesaZlebelia ganisazrvros siebzec. 4

21 am SemTxvevaSi, rekursiis baza iqneba carieli sia ([]). ganvsazrvrot siis sigrzis gamotvlis funqcia (vinaidan saxeli length ukve dakavebulia standartul bibliotekasi, funqcias davarqvat len): len [] = 0 len s = 1 + len (tail s) gavixsenot, rom sia, romlis pirveli elementi (siis Tavi) aris x, xolo danarcen elementebs (siis kudi) warmoadgens xs, Caiwereba rogorc x : xs. amgvari konstruqcia SesaZloa gamoyenebuli iyos funqciis arwerisas: len [] = 0 len (x:xs) = 1 + len xs moviyvanot kidev erti magaliti. funqcia, romelic Sesasvlelze Rebulobs ricxvebis wyvils da abrunebs mat jams, SeiZleba ase ganisazrvros: sum_pair p = fst p + snd p Tumca, rogor moviqcet, Tu sawiroa ganisazrvros funqcia, romelic Rebulobs ricxvebis sameuls da abrunebs mat jams? Cven ar gvaqvs f st da snd funqciebis msgavsi funqciebi sameulebidan elementebis amosarebad. armocnda, rom aseti funqciebi Sei- Zleba Caiweros Semdegnairad: sum_pair (x,y) = x + y sum_triple (x,y,z) = x + y + z aset xerxs uwodeben nimustan Sedarebas (pattern matching). igi warmoadgens enis Zalze Zlier konstruqcias. nimusebi Caiwereba funqciis argumentebad da Sedardeba funqciaze gadacemul faqtiur parametrebs. rodesac xdeba nimustan Sedareba, massi monawile cvladebi Rebuloben Sesabamis mnisvnelobebs. Tu es mnisvnelobebi funqciis gamotvlistvis ar aris sawiro (magalitad, funqcia my_tail Semdeg magalitsi), masin zedmeti saxelebis Semotanis nacvlad SeiZleba gamoyenebuli iyos simbolo _. igi arnisnavs nimuss, romelsac Seesabameba nebismieri mnisvneloba, TviTon es mnisvneloba ki arcert cvlads ar ukavsirdeba. Semdegi magalitebi ucveneben nimustan Sedarebis gamoyenebis sxvadasxva variantebs: 5

22 -- funqcia, romelic Sekrebs siis pirvel or \geoac wevrs f1 (x:y:xs) = x + y -- funqciis gansazrvreba, romelic head-is analogia my_head (x:xs) = x -- funqciis gansazrvreba, romelic tail-is analogiuria. -- Cven viyenebt simbolo _-s imitom, rom siis -- pirveli elementis mnisvneloba ar aris sawiro my_tail (_:xs) = xs -- funqcia, romelic irebs pirvel wevrs sameulidan fst3 (x,_,_) = x nimustan Sedareba SeiZleba gamoyenebuli iyos operatorsi case: -- siis sigrzis gansazrvris kidev erti funqcia my_length s = case s of [] -> 0 (_:xs) -> 1 + my_length xs SeiZleba sakmaod rtuli nimusebis gansazrvra. ganvsazrvrot funqcia, romelic irebs ricxvta wyvilebs da abrunebs mati sxvaobebis jams ( anu f[(x1, y1), (x2, y2),..., (xn, yn)] = (x1 y1) + (x2 y2) (xn yn)): f [] = 0 f ((x,y):xs) = (x - y) + f xs 7 siebis ageba im funqciebis gansazrvristvis, romlebic abruneben siebs, xsirad gamoiyeneba operatori :. magalitad, funqcia, romelic Rebulobs ricxvebis sias da abrunebs am ricxvebis kvadratebs, SeiZleba ase ganisazrvros: square [] = [] square (x:xs) = x*x : square xs 6

23 8 zogierti sasargeblo funqciebi laboratoriuli funqciebis Sesrulebisas SesaZloa dag- WirdeT Haskell enis Semdegi standartuli funqciebi: even --- abrunebs True-s luwi argumentistvis da False-s kentebistvis. odd --- winas analoguri, mxolod argumens amowmebs kentobaze. 9 davalebebi 1. gansazrvret funqcia, romelic Sesasvlelze Rebulobs mtel ricxvs n-s da abrunebs sias, romelic Sedgeba n elementisgan, dalagebuls zrdadobit. 1. naturaluri ricxvebis sia. 2. kenti naturaluri ricxvebis sia. 3. luwi naturaluri ricxvebis sia. 4. naturaluri ricxvis kvadratebis sia. 5. faqtorialebis sia is xarisxebis sia. 7. samkutxeduris ricxvebis sia. (ganmarteba: n-uri samkutxeduri ricxvi tn tolia ertnairi monetebis raodenobisa, romlebidanac SeiZleba Sedges tolgverda samkutxedi, romlis TiToeul gverdzec daideba n moneta. cxadia, rom t 1 = 1 da t n = n + tn 1). 8. piramidaluri ricxvebis sia. (ganmarteba: n-uri piramidaluri ricxvi pn tolia ertnairi burtebis raodenobisa, romlebidanac SeiZleba aigos swori piramida samkutxedis ZiriT, romlis TiToeul gverdzec daideba n burti. cxadia, rom p 1 = 1 da = tn + pn 1). 7

24 2. gansazrvret Semdegi funqciebi: 1. funqcia, romelic Sesasvlelze Rebulobs namdvil ricxvebs da itvlis mat sasualo aritmetikuls. SeecadeT, rom funqciam mxolod ertxel gadaxedos sias. 2. funqcia gamoyofs mocemuli siis n wevrs. 3. ori siis elementebis ajamvis funqcia. abrunebs sias, romelic Sedgeba parametri siebis elementebis jamisgan. gaitvaliswinet, rom gadacemuli siebi SeiZleba iyos sxvadasxva sigrzis. 4. funqcia, romelic aadgilebs mocemul siasi mezobel luw da kent elementebs. 5. funqcia twopow n, romelic itvlis 2 n Semdegi mosazrebebidan gamomdinare. davusvat sawiroa aviyvanot 2 xarisxsi. Tu n luwia, anu n = 2k, masin 2 n = 2 2k = (2 k ) 2. Tu n kentia, anu n = 2k + 1, masin 2 n = 2 2k+1 = 2(2 k ) 2. funqciam twopow ar unda gamoiyenos operatori ˆ an sxva funqcia standartuli bibliotekidan, romelic itvlis xarisxs. funqciis rekursiuli gamozaxebebi unda iyos logn-is proporciuli. 6. funqcia removeodd, romlic mocemuli mteli ricxvebis siidan amoslis yvela kent ricxvs. magalitad, removeodd [1, 4, 5, 6, 10] unda daabrunos [4, 10]. 7. funqcia removeempty, romelic amoagdebs cariel striqonebs striqonebis mocemuli siidan. magalitad, removeempty [, Hello,,, W orld! ] unda daabrunos [ Hello, W orld! ]. 8. funqcia countt rue :: [Bool] > Integer, romelic abrunebs siis im elementebis raodenobas, romlebic aris T rue-s toli. 9. funqcia makep ositive, romelic ucvlis nisans ricxvebis siis yvela uaryofit elements. magalitad, makep ositive [ 1, 0, 5, 10, 20] gvazlevs [1, 0, 5, 10, 20]. 10. funqcia delete :: Char > String > String, romelic irebs Sesasvlelze striqons da simbolos da abrunebs striqons, 8

25 romlidanac amoslilia mocemuli simbolo. magali- Tad, delete l Hello world! unda daabrunos Heo word!. 11. funqcia substitute :: Char > Char > String > String, romelic cvlis mocemul simbolos meore somboloti. magalitad, substitute e i eigenvalue abrunebs iiginvalui. 10 sakontrolo SekiTxvebi 1. gasworebis wesebi. 2. Sedareba nimustan. 3. amorcevis operacia. 4. funqciis fragmentuli mocema. 9

26 leqcia # 3 1 let-dakavsireba funqciis arwerisas xsirad aucilebelia gamoviyenot droebiti cvladebi Sualeduri mnisvnelobebis Sesanaxad. gavixsenot, Tu rogor vitvlit ax2 + bx + c = 0 kvadratuli gantolebis fesvebs x 1,2 = ( b ± b 2 4ac)/2a SeiZleba Caiweros funqcia kvadratuli gantolebis fesvebis gamosatvlelad: roots a b c = ((-b + sqrt (b*b - 4*a*c)) / (2*a), (-b - sqrt (b*b - 4*a*c)) / (2*a)) aseti stilit programis dawera ramdenime problemas Seicavs. jer erti, SeiZleba advilad davusvat Secdoma er- Tidaigive gamosaxulebis orjer dawerisas. meore, am programis dawerisas sawiroa SevadaroT ori gamosaxuleba, rom davrwmundet, rom ertidaigivea. mesame, programa ufro grzeli xdeba. da bolos, is naklebad efeqturia, vinaidan kompiuteri itvlis ertidaigive gamosaxulebas orjer. am problebis asacileblad enasi Semotanilia lokaluri cvladis cneba. funqcia SeiZleba Caiweroas ase: roots a b c = let det = sqrt (b*b - 4*a*c) in ((-b + det / (2*a), (-b - det / (2*a)) lokaluri cvladi det mirwevadia mxolod roots funqciis gansazrvrebasi. SeiZleba ramdenime lokaluri funqcia ganvsazrvrot: roots a b c = let det = sqrt (b*b - 4*a*c) 1

27 twice_a = 2*a in ((-b + det) / twice_a, (-b - det) / twice_a) SevniSnoT, rom konstruqciasi let...in... gamoiyeneba gasworebis wesebi: xarvezisgan gansxavebuli pirveli simbolo, romelic mosdevs sityva let-s, asaxelebs svets, romlis mixedvitac unda gaswordes Semdgomi gansazrvrebebi. Tu gamoviyenebt simboloebs, da ;, masin gasworebis wesebi arar iqneba aucilebeli da masin funqcia roots SeiZleba ase Caiweros: roots a b c = let { let = sqrt (b*b - 4*a*c); twice_a = 2*a } in ((-b + det) / twice_a, (-b - det) / twice_a) let...in... komstruqciis garda, zogjer mosaxerxebelia...where... konstruqciis gamoyeneba. am konstruqciisas lokaluri cvladebis gamoyeneba mosdevs ZiriTad funqcias: roots a b c = ((-b + det) / twice_a, (-b - det) / twice_a) where det = sqrt (b*b - 4*a*c) twice_a = 2*a SevniSnoT, rom nacvlad lokaluri cvladis Semotanisa, SeiZleba gagvesazrvra globaluri funqcia: det a b c= sqrt (b*b - 4*a*c) twice_a a = 2*a roots a b c = ((-b + det a b c) / twice_a a, (-b - det a b c) / twice_a a) Tumca, am midgomis nakli TvalsaCinoa: SemovitaneT globalur saxelta aresi ori damxmare funqcia (es ki imas nisnavs, rom Cven arar gveqneba ufleba gamoviyenot, magali- Tad, saxeli det sxva funqciistvis), aseve gamosaxulebebis b 2 4ac da 2a gamosatvlelad unda gadavcet funqcias Sesabamisi 2

28 parametrebi, masin, roca lokalur cvladebs Tavisuflad SeuZliaT im funqciis parametrebis gamoyeneba, romlistvisac isini arian gansazrvruli. konstruqciebsi let da where SeiZleba ganisazrvros ara mxolod cvladebi, aramed funqciebic. ganvixilot, magali- Tad, funqcia, romelic abrunebs mocemuli n ricxvis mixedvit naturaluri ricxvebis sias [1,2,...,n]. SemovitanoT damxmare funqcia numsrom, romelic mocemuli m ricxvis mixedvit abrunebs sias [m, m + 1, m + 2,..., n] da ganvsazrvrot igi, rogorc lokaluri funqcia: numsto n = let numsfrom m = if m == n then [m] else m:numsfrom (m + 1) in numsfrom 1 SevniSnoT, rom funqcia numsf rom Tavis gansazrrebasi iyenebs cvlads n, Tumca mas igi ar gadaecema parametrad. 2 signalizacia Secdomebis Sesaxeb Cvens mier gansazrvruli funqciebi SeiZleba ar iyos gamotvladi argumentebis zogierti mnisvnelobistvis. gavixsenot funqcia faqtorialis ganmarteba: factorial 0 = 1 factorial n = n * factorial (n - 1) es funqcia swored musaobs manam, sanam ar SevecdebiT gamovtvalot uaryofiti ricxvis faqtoriali. rtuli ar aris mivxvdet, rom am dros rekursia usasrulod grzeldeba, imitom rom bazuri SemTxveva arasdros miirweva. aseti Secdomebis Sesaxeb Setyobinebis martivi sasualebaa standartuli funqcia error-is gamoyeneba. es funqcia argumentad irebs striqons, misi gamotvla ki iwvevs programis damtavrebas da am striqonis gamotanas ekranze. amrigad, funqcia ase CavweroT: factorial 0 = 1 factorial n = if n > 0 then n * factorial (n - 1) else error "factorial: negative argument" 3

29 3 damcavi pirobebi nimustan Sedareba izleva funqciis gansazrvrebis did Sesa- Zloblebebs, Tumca misi sasualebit ara mxolod funqciistvis gadasacemi parametrebis struqturis gamoyofa da am elementebis Sedareba aris SesaZlebeli parametrebis konstantur mnisvnelobebtan. Tumca, zogjer es ar aris sakmarisi: aucilebelia Sesasvlel parametrebs daedot ufro rtuli pirobebi. magalitad, funqcia f actorial-is zemot moyvanil magalitsi Cven gamoviyenet nimustan Sedarebisa da pirobiti operatoris kombinacia. nimustan Sedareba gamoiyureba ufro natlad da ekonomiurad. SeiZleba Tu ara msgavsi sintaqsi gamoviyenot pirobistvisac? diax, Tu gamoviyenebt damcvel pirobebs. mati gamoyenebit faqtorialis gamotvlis funqcia ase Caiwereba: factorial 0 = 1 factorial n n < 0 = error "factorial: negative argument" n >= 0 = n * factorial (n - 1) moyvanili magalitidan Cans gamosaxulebis Caweris sintaqsi. SevniSnoT, rom bolo pirobis nacvlad SeiZleba gamoyenebuli iyos gasarebi sityva otherwise (inglisurad-winaarmdeg SemTxvevaSi). magalitad, funqcia, romelic gansazrvravs ricxvis nisans, ase gamoiyureba: signum x x < 0 = -1 x == 0 = 0 otherwise = 1 funqciia aseti stilit ganmarteba ufro TvalsaCinoa da Haskell-is programebsi xsirad gamoiyeneba (sesabamisad, pirobiti operatori gamoiyeneba isviatad). TvalsaCinoebisTvis, ganvsazrvrot funqcia signum pirobiti operatorebis gamoyenebit: signum x = if x < 0 then -1 else if x == 0 then 0 else -1 4

30 4 polimorfuli tipebi ena Haskell-Si gamoiyeneba tipebis polomorfuli sistema. arsebitad, es nisnavs, rom enasi arsebobs tipebis cvladebi. ganvixilot, CvenTvis ukve nacnobi funqcia tail,romelic gvibrunebs siis pirvel elements. rogoria an funqciis tipi? is ertnairad gamoiyeneba rogorc mteli ricxvebis siistvis, aseve simboloebisa da striqonebis siebistvisac: Prelude>tail [1,2,3] [2,3] Prelude>tail [ a, b, c ] [ b, c ] Prelude>tail ["list", "of", "lists"] ["of", "lists"] funqcia tail-s aqvs polimorfuli tipi: [a] > [a]. es nisnavs, rom igi argumentad irebs nebismier sias da abrunebs igive tipis sias. aq a arnisnavs tipis cvlads, anu igulisxmeba, rom mis magivrad SeiZleba Caisvas nebismieri konkretuli tipi. amrigad, Canaweri [a] > [a] izleva tipebis mtel klass, romlis warmomadgenlebic aris, magalitad, [Integer] > [Integer], [Char] > [Char], [[Char]] > [[Char]] da a.s. analogiurad, funqcias tail, romelic abrunebs siis pirvel elements, aqvs tipi [a] > a. tipebis am ojaxis warmomadgenlebi arian [Integer] > Integer, [Char] > Char da a.s. siebtan, wyvilebtan da kortejebtan momusave mraval funqcias polimorfuli tipi. ase, funqcias f st-s aqvs tipi (a, b) > a (SevniSnoT, rom am tipis gansazrvrasi gamopyenebulia tipis ori cvladi). 5 momxmareblis tipebi programists aqvs SesaZlebloba standartuli tipebis gverdit gansazrvros monacemebis Tavisi sakutari, specifiuri tipebi. amistvis sawiroa gamoyenebuli iyos gasarebi sityva data. 5

31 5.1 wyvilebi magalitistvis ganvixilot wyvilebis ganmarteba, romelic zalze waagavs standartuls: d data Pair a b = Pair a b detalurad ganvixilot es kodi. gasarebi sityva data gvicvenebs, rom Cven vgegmavt monacemebis tipis gansazrvras. mas mosdevs am tipis dasaxeleba, Cven SemTxvevaSi P air (gavixsenot, rom tipebis dasaxeleba yoveltvis didi, mtavruli asoti iwyeba). a da b warmoadgenen tipebbis cvladebs, romlebic tipebis parametrebs arnisnaven. amrigad, Cven arvwerot monacemta struqtura, romelic parametrizebulia ori tipit a da b. (es Zalze waagavs ena C + +-is Sablonebs). tolobis nisnis Semdeg Cven mivutitebt am tipis monacemebis konstruqtors. am SemTxvevaSi Cven gvaqvs ertaderti konstruqtori P air. (ar aris aucilebeli monacemebis konstuqtoris saxeli emtxveodes tipis saxels, Tumca Cvens magalitsi es bunebrivia). konstruqtoris saxelis Semdeg Cven isev vwert a. es arnisnavs, rom wyvilis konstruirebistvis sawiroa ori mnisvneloba: pirveli, romelic ekutvnis a-s, meore - b-s. am ganmartebas Semoyavs funqcia P air :: a > b > P airab, romeliv gamoiyeneba P air tipis wyvilebis asagebad. CavtvirToT es kodi interpretatorsi, vnaxot, rogor iqmneba wyvilebi: Main>:t Pair Pair :: a -> b -> Pair a b Main>:t Pair a Pair a :: a -> Pair Char a Main>:t Pair a "Hello" Pair a "Hello" :: Pair Char [Char] monacemebis konstruqtorebis Sesabamis funqciebs axasitebt is Tviseba, rom SeiZleba mati gamoyeneba nimustan Sedarebisas. ase, rom funqciebi, romlebitac vrebulobt Cveni wyvilistvis pirvel da meore elements, SeiZleba ganimartos Semdegnairad: pairfst (Pair x y) = x pairsnd (Pair x y) = y 6

32 gamxiluli magaliti iwvevs aset SekiTxvas: ristvisaa sawiro sakutari P air tipis gansazrvra, roca aris wyvilebis gansazrvris standartuli sasualeba? jer erti, P air tipis gamoyenebit SeiZleba ganisazrvros funqciata nakrebi, romelic mxolod am tiptan musaobs da gamoiyos es funqciebi im funqciebisgan, romlebic zogadad musaoben wyvilebta. meorec, wyvilebis misarebas SeiZleba daedos SezRudvebi, romelic ver moxerxdeba standartuli tipistvis. magakitad, warmoidginet, rom sawiroa tipi, romelic Seqmnis wyvils ertidaigive tipis elementebisgan. es tipi SeiZleba ase ganisazrvros: data SamePair a = SamePair a a aq tips aqvs erti parametri, Tumca monacemebis konstruqtori irebs erti da imave tipis or parametrs. 5.2 mravlobiti konstruqtorebi wina magalitsi Cven ganvixilet monacemta tipi erti konstruqtorit. aseve, SesaZlebelia da xsirad Zalze sasargebloa ganisazrvros tipi ramdenime konstruqtorit. konstruqtorebi ertmanetisgan gamoiyofa simboloti. ganvixilot tipi Color, romelic warmoadgens fers SesaZlo mnisvnelobebit Red, Green da Blue. igi SeiZleba ase ganisazrvros: data Color = Red Green Blue aq Color aris tipis dasaxeleba, xolo Red, Green da Blue monacemebis konstruqtorebi. SevniSnoT, rom es tipi ar Rebulobs parametrebs. aset tipebs uwodeben CamoTvlad tipebs da igi Seesabameba ena C + +-is enum konstruqcias. aseti tipebi zalze sasargebloa. magalitad, standartuli tipi Bool ase ganisazrvreba: data Bool = True False mravlobitma konstruqtorebma, aseve, SeiZleba miiron parametrebi. SevniSnoT, rom tipi Color sasualebas gva- Zlevs ganvsazrvrot mxolod sami fiqsirebuli feri. gavafartovot igi ise, rom mas SeeZlos gansazrvros nebismieri feri, mocemuli sami mteli ricxvit, romlebic Seesabameba 7

33 witeli, mwvane da lurji ferebis doneebs (standartuli rgb warmodgena): data Color = Red Green Blue RGB Int Int Int aq tipi Color standartuli ferebis Red, Green da Blue garda (es sia, ra Tqma unda, SeiZleba gafartovdes), SeiZleba ganisazrvros RGB konstruqtoris sasualebit, romelic Rebulobs sam mtel ricxvs rgb komponentebis gansasazrvrad. masin, magalitad, funqcia, romelic gamoyofs feris Red komponents, SeiZleba ase Caiweros: redcomponent :: Color -> Int redcomponent Red = 255 redcomponent (RGB r ) = r redcomponent _ = 0 mravalkonstruqtoriani tipebi, aseve, SeiZleba iyos polimorfuli. ganvixilot Semdegi problema. davusvat, funqcia abrunebs raime mnisvnelobas, an izleva Setyobinebas Secdomis Sesaxeb. magalitad, wrfivi gantolebis fesvebis povnis funqcia abrunebs napovn fesvebs; funqcia, romelic ezebs siasi pirvel arauaryofit ricxvs, abrunebs am ricxvs da a.s. amastan, gantolebis amoxsna SeiZleba ar arsebobdes, siasi ar iyos arauaryofiti ricxvebi da a.s. rogor moxdes amis Setyobineba imistvis, vinc funqcia gamoizaxa? zogjer, SesaZloa SeTanxmeba, rom romelime specialuri mnisvneloba (magalitad, 1) nisnavdes, rom ar aris Sedegi (C enis standartuli bibliotekis bevri funqcia swored ase iqceva). Tumca, es yoveltvis ar aris SesaZlebeli: wrfivi gantolebis amoxsnis SemTxvevaSi aseti mnisvneloba ar arsebobs. problema ixsneba standartuli tipis M aybe-is sasualebit, romelic ase ganisazrvreba: data Maybe a = Nothing Just a tipi M aybe (inglisurad, SesaZlebelia ) parametrizirebulia tipuri cvladit a da warmodgeba ori konstruqtorit: N othing (inglisurad, araferi ) da Just (inglisurad, zustad ) azroblivi SedegisTvis. masin Cveni funqciebi Sei- Zleba ase Caiweros: 8

34 --funqcia abrunebs ax + b = 0 gantolebis fesvs solve :: Double -> Double -> Maybe Double solve 0 b = Nothing solve a b = Just (-b / a) --funqcia abrunebs siis pirvel arauaryofit elements findpositive :: [Integer] -> Maybe Integer findpositive [] = Nothing findpositive (x:xs) x > 0 = Just x otherwise = findpositive xs M aybe tipis gamoyenebas aqvs mteli rigi upiratesobebi. misi gamoyenebit cxadad mivutitebt, rom funqciam SeiZleba daabrunos aranairi Sedegi. amastan, funqciis dasabrunebeli mnisvnelobis damusavebisas sawiroa cxadad iyos Sedareba nimustan, da tu Cven dagvaviwydeba N othing SemTxvevis damusaveba, kompilerma SeiZleba mogvces gafrtxileba. 5.3 tipebis klasebi tipebis klasebi mnisvnelovnad amartivebs momxmareblis tipeb- Tan musaobas. SemdgomSi mat detalurad SeviswavliT. tipebis klasi warmoadgens tipebis gansazrvrul simravles, romlebsac mteli rigi saerto Tvisebebi aqvt. magalitad, tipebis klassi Eq Sedis yvela tipi, romlebis obieqtebistvisac gansazrvrulia tolobis mimarteba, anu, Tu x da y ekutvnis ertidaigive tips, romelic Sedis q klassi, masin SeiZleba gamovtvalot gamosaxuleba x == y da x/ = y. yvela martivi tipi, aseve siebi da kortejebi Sedis am klassi, Tumca, magalitad, funqciistvis mimarteba toloba ar aris gansazrvruli da amitom tipi funqcia ar Sedis Eq klassi. Semdegi mnisvnelovani klasia Show klasi. massi Sedis yvela tipi, romlis obieqtebi SeiZleba gardaqmnili iyos striqonsi imisatis, rom moxdes mati ekranze asaxva. martivi tipebi, kortejebi da siebi Sedis am klassi, amitom interpretators SeuZlia dabewdos, magalitad, striqoni. funqcia ar Sedis am klassi. SeTanxmebis principit momxmareblis tipebi ar Sedis arcert klassi, amitom mati mnisvnelobebis Sedareba ar SeiZleba da verc interpretatori dabew- 9

35 davs. es, ra Tqma unda, mouxerxebelia, amitom tipebis gansazrvrisas SesaZlebelia is mivakutvnot sasurvel klass. amistvis, tipis gansazrvris Semdeg sairoa daematos gasarebi sityva deriving da frcxilebsi CamovTvaloT klasebi, romlebsac unda ekutvnodes tipi. magalitad: -- tipi, romelic warmoadgens dris periodia data DayTime = Morning Afternoon Evening Night deriving (Eq, Show) davalebebsi tipebis arwerisas miakutvnet isini klasebs Eq da Show. amit gaiadvilebt samusaos. 6 davalebebi 1. Tanamedrove web maraziasi xsirad iyideba wignebi, videokasetebi da kompaqt diskebi. am maraziis monacemta baza TiToeuli saxeobis saqonlistvis unda SeicavdesSemdeg maxasiateblebs: wignebistvis: dasaxeleba da avtori videokasetebistvis: dasaxeleba kompaqt diskebistvis: dasaxeleba, Semsrulebeli da kompoziciebis raodenoba. 1) SeqmeniT monacemta tipi P roduct, romelic warmoadgens saqonlis am tipebs. 2) gansazrvret funqcia gett itle, romelic daabrunebs saqonlis dasaxelebas. 3) am funqciis safuzvelze gansazrvret funqcia gett itles, romelic saqonlis siis mixedvit daabrunebs mat dasaxelebebis sias. 4) gansazrvret funqcia bookauthors, romelic saqonlis siis mixedvit daabrunebs wignebis avtorebis sias. 5) gansazrvret funqcia lookuptitle :: String -> [Product] -> Maybe Product 10

36 romelic daabrunebs saqonels mocemuli dasaxelebit (yuradreba miaqciet funqciis Sedegis tips). 6) gansazrvret funqcia lookuptitles :: [String] -> [Product] -> [Product] is parametrad irebs dasaxelebebis sias da saqonlis sias da TiToeuli dasaxelebistvis irebs meore siidan Sesabamis saqonels. is dasaxeleba, romelsac saqoneli ar Seesabameba, ignorirdeba. funqciis gansazrvrisas savaldebuloa gamoiyenot funqcia lookupt itle. 2. gansazrvret monacemta tipi, romelic warmoadgens karts kartis TamaSisas. TiToeul karts aqvs erti masti otxi SesaZlodan. karti SeiZleba iyos dabali (oridan atis CaTvliT) an surati (valeti, dama, babua, tuzi). gansazrvret Semdegi funqciebi: 1) funqcia ism inor, romelic amowmebs, rom misi argumenti aris dabali karti. 2) funqcia samesuit, romelic amowmebs, rom mastvis gadacemuli kartebi erti mastisaa. 3) funqcia beats :: Card > Card > Bool, romelic amowmebs, rom karti, romelic pirvel argumentad gadaecema, Wris karts, romelic meore argu,mentad gadaecema. 4) funqcia beats2 analogiuria beats is, mxolod damatebit argumentad irebs koziris masts. 5) funcia beatslist,romelic argumentad irebs kartebis sias, karts da koziris masts da abrunebs im kartis sias pirveli argumentidan, romlebic Wris mocemul karts koziris gatvaliswinebit. 6) funqcia, romelic kartis mocemuli siis mixedvit abrunebs ricxvebis sias, romlebis warmoadgens mocemuli kartis Sesa- Zlo qulata jams, romelic itvleba TamaSis Tormeti ert- Si wesebis mixedvit: patara karti itvleba nominalis mixedvit, valeti, dama da babua itvleba 10 qulad, xolo tuzi an 1 an 11 qulad. funqciam unda daabrunos yvela SesaZlo variantebi. 3. gansazrvret tipi, romelic warmoadgens geometriul funqcias. figura SeiZleba iyos an wrewiri (xasiatdeba centris koordinatebit da radiusit), martkutxedi (xasiatdeba marcxena zeda da qveda marjvena kutxeebis koordi- 11

37 natebit), samkutxedi (wveroebis koordinatebi) da teqsturi veli (mistvis aucilebelia Senaxuli iqnas marcxena qveda kutxe, Srifti da striqoni, romelic warweras warmoadgens). Srifti moicema sam elementiani simravlidan: Courier, Lucida da F ixedsys. gansazrvret semdegi funqciebi: 1) funqcia area, romelic abrunebs figuris fartobs. testuri velis fartobi damokidebulia SriftSi asoebis simarlesa da siganeze. vinaidan Cvens mier arceuli Sriftebi aris monosiganis (anu yvela asos sigane ertidaigivea), CvenTvis aucilebeli iqneba ganisazrvros damxmare funqcia, romelic mocemuli SriftisTvis daabrunebs mis gabaritebs. 2) funcia getrectangles, romelic siidan mxolod martkutxedebs arcevs. 3) funqcia getbound, romelic mocemuli figuristvis abrunebs martkutxeds, romelic sazrvravs am figuras. 4) funqcia getbounds, romelic figurebis mocemuli siistvis abrunebs mati SemomsazRvreli martkutxedebis sias. 5) funqcia getf igure, mocemuli figurebis siistvis da wertilis koordinatebis mixedvit abrunebs pirvel figuras, romlistvisac wertili xvdeba mis SemomsazRvrel martkutxedsi. gamoiyenet tipi M aybe mnisvnelobis dasabruneblad. 6) funqcia move, romelic mocemuli figuristvis da Zvris veqtoristvis abrunebs axal figuras, romelic dazruli iqneba mocemuli veqtorit. 4. uzravi qonebis saagentosi iyideba binebi, otaxebi da kerzo saxlebi. bina xasiatdeba sartulit, fartobit da saxlis sartulebis raodenobit. otaxi xasiatdeba amis garda kidev fartobit (damatebit mteli binis fartobisa). kerzo saxli xasiatdeba mxolod fartobit. monacemta bazasi inaxeba mnisvnelobebis wyvilebi, romeltagan pirveli warmoadgens uzrav obieqts, meore mis fass. gansazrvret monacemta tipi, romelic warmoadgens uzravi qonebis obieqtebze informacias. gansazrvret Semdegi funqciebi: 1) gethouses, arcevs monacemta bazidan mxolod kerzo saxlebs. 2) getbyp rice, arcevs monacemta bazidan mxolod uzravi qonebis im obieqtebs, romelta fasi naklebia mititebulze. 3) getbylevel, ircevs monacemta bazidan binebs, romlebic mocemul sartulze mdebareobs. 4) getexceptbounds, ircevs monacemta bazidan binebs, romlebic ar mdebareobs pirvel da bolo sartulebze. 12

saqartvelos teqnikuri universiteti

saqartvelos teqnikuri universiteti saqartvelos teqnikuri universiteti g. janelize daprogramebis safuzvlebi damtkicebulia stu-s saswavlo-metoduri sabwos mier Tbilisi 2002 uak 681.3.06 wignsi ganxilulia daprogrameba Turbo Pascal-is, Object

More information

obieqtze orientirebuli programirebis ena C#

obieqtze orientirebuli programirebis ena C# T. baxtaze obieqtze orientirebuli programirebis ena C# Object Main Class { this new new this Object new Object this "teqnikuri universiteti" saqartvelos teqnikuri universiteti T. baxtaze obieqtze orientirebuli

More information

II. grafika. grafikuli obieqtebis ageba: funqcia Graphics

II. grafika. grafikuli obieqtebis ageba: funqcia Graphics II. grafika grafikuli obieqtebis ageba: fuqcia Graphics wia leqciasi Cve gavixilet Mathematica sistemis grafikuli fuqciebi Plot (grafikis ageba sibrtkeze) da Plot3D (grafikis ageba sivrcesi). agretve gaxiluli

More information

inga abulaze laboratoriuli samusaoebi VBA enaze `teqnikuri

inga abulaze laboratoriuli samusaoebi VBA enaze `teqnikuri inga abulaze laboratoriuli samusaoebi VBA enaze `teqnikuri universiteti @ saqartvelos teqnikuri universiteti inga abulaze laboratoriuli samusaoebi VBA enaze registrirebulia stu-s saredaqcio-sagamomcemlo

More information

monacemta bazebis martvis sistemebi

monacemta bazebis martvis sistemebi saqartvelos teqnikuri universiteti b. mefarisvili monacemta bazebis martvis sistemebi Tbilisi 2008 uak 681.3.06 saxelmzrvanelo gankutvnilia `idmas~ specialobis meotxe kursis studentebisatvis saleqcio,

More information

1 leqcia PERL-is zogadi mimoxilva PERL-is dayeneba perl [ -sttuuwx ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ - D[number/list] ] [

1 leqcia PERL-is zogadi mimoxilva PERL-is dayeneba perl [ -sttuuwx ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ - D[number/list] ] [ 1 leqcia PERL-is zogadi mimoxilva PERL-is dayeneba perl [ -sttuuwx ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ - D[number/list] ] [ -pna ] [ -Fpattern ] [ - l[octal] ] [ -0[octal/hexadecimal]

More information

maswavlebelta profesiuli ganvitarebis centri informaciulsakomunikacio teqnologiebis sabazo kursi maswavleblebistvis maswavlebelta informaciul-sakomunikacio teqnologiebis treningis programa maswavlebelta

More information

qcevis gamoyenebiti analizi procedurebis saxelmzrvanelo

qcevis gamoyenebiti analizi procedurebis saxelmzrvanelo Th e Ma n ualofapp lie d Be h a v iouran a ly sis Proce dure s qcevis gamoyenebiti analizi procedurebis saxelmzrvanelo Tb ilisi,mmay 2000 ' Ba rry S. Pra son son, M A Dip C lin Psy ch Ph D FNZ PsS Targmani:

More information

1. CamoTvlilTagan ra SeiZleba gamoisaxos Semdegi CanaweriT:

1. CamoTvlilTagan ra SeiZleba gamoisaxos Semdegi CanaweriT: instruqcia davalebebisatvis # 1 _ 30: davalebasi dasmulia SekiTxva da mocemulia otxi savaraudo pasuxi, romeltagan mxolod ertia swori. pasuxebis furcelze davalebis Sesabamisi nomris qves ipovet ujra, romelic

More information

PROGRAMMING IN HASKELL. Chapter 2 - First Steps

PROGRAMMING IN HASKELL. Chapter 2 - First Steps PROGRAMMING IN HASKELL Chapter 2 - First Steps 0 The Hugs System Hugs is an implementation of Haskell 98, and is the most widely used Haskell system; The interactive nature of Hugs makes it well suited

More information

gv. 05 robert kavtiasvili: interviuebi majoritarobis kandidatebtan trampis msvidoba da manevrebis politika gadawyvetileba

gv. 05 robert kavtiasvili: interviuebi majoritarobis kandidatebtan trampis msvidoba da manevrebis politika gadawyvetileba CMYK factcheck.ge 1 12-18 seqtemberi, 2016 #006 fasi 1 lari sainformacio-analitikuri gazeti, gamodis orsabatobit ateulebi romeli saxelebi miizidavs amomrcevels gv. 04 23 qali, 2 momrerali, 1 msaxiobi,

More information

CSc 372. Comparative Programming Languages. 4 : Haskell Basics. Department of Computer Science University of Arizona

CSc 372. Comparative Programming Languages. 4 : Haskell Basics. Department of Computer Science University of Arizona 1/40 CSc 372 Comparative Programming Languages 4 : Haskell Basics Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg 2/40 The Hugs Interpreter The

More information

Object Oriented Programming Using C++ Mathematics & Computing IET, Katunayake

Object Oriented Programming Using C++ Mathematics & Computing IET, Katunayake Assigning Values // Example 2.3(Mathematical operations in C++) float a; cout > a; cout

More information

CSc 372 Comparative Programming Languages. 4 : Haskell Basics

CSc 372 Comparative Programming Languages. 4 : Haskell Basics CSc 372 Comparative Programming Languages 4 : Haskell Basics Christian Collberg Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2011 Christian Collberg August 23, 2011

More information

It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis Chapter 14 Functional Programming Programming Languages 2nd edition Tucker and Noonan It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

More information

Programming Languages Fall 2013

Programming Languages Fall 2013 Programming Languages Fall 2013 Lecture 2: types Prof. Liang Huang huang@qc.cs.cuny.edu Recap of Lecture 1 functional programming vs. imperative programming basic Haskell syntax function definition lazy

More information

Haskell through HUGS THE BASICS

Haskell through HUGS THE BASICS Haskell through HUGS THE BASICS FP for DB Basic HUGS 1 Algorithmic Imperative Languages variables assignment if condition then action1 else action2 loop block while condition do action repeat action until

More information

Haskell An Introduction

Haskell An Introduction Haskell An Introduction What is Haskell? General purpose Purely functional No function can have side-effects IO is done using special types Lazy Strongly typed Polymorphic types Concise and elegant A First

More information

According to Larry Wall (designer of PERL): a language by geniuses! for geniuses. Lecture 7: Haskell. Haskell 98. Haskell (cont) - Type-safe!

According to Larry Wall (designer of PERL): a language by geniuses! for geniuses. Lecture 7: Haskell. Haskell 98. Haskell (cont) - Type-safe! Lecture 7: Haskell CSC 131 Fall, 2014 Kim Bruce According to Larry Wall (designer of PERL): a language by geniuses for geniuses He s wrong at least about the latter part though you might agree when we

More information

EDAF40. 2nd June :00-19:00. WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read.

EDAF40. 2nd June :00-19:00. WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read. EDAF40 2nd June 2017 14:00-19:00 WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read. DO NOT WRITE WITH OTHER COLOUR THAN BLACK - coloured text

More information

Haskell Overview III (3A) Young Won Lim 10/4/16

Haskell Overview III (3A) Young Won Lim 10/4/16 (3A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published

More information

Standard prelude. Appendix A. A.1 Classes

Standard prelude. Appendix A. A.1 Classes Appendix A Standard prelude In this appendix we present some of the most commonly used definitions from the standard prelude. For clarity, a number of the definitions have been simplified or modified from

More information

Solution sheet 1. Introduction. Exercise 1 - Types of values. Exercise 2 - Constructors

Solution sheet 1. Introduction. Exercise 1 - Types of values. Exercise 2 - Constructors Solution sheet 1 Introduction Please note that there can be other solutions than those listed in this document. This is a literate Haskell file which is available as PDF, as well as literate Haskell source

More information

CSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc.

CSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc. CSC312 Principles of Programming Languages : Functional Programming Language Overview of Functional Languages They emerged in the 1960 s with Lisp Functional programming mirrors mathematical functions:

More information

Lecture 19: Functions, Types and Data Structures in Haskell

Lecture 19: Functions, Types and Data Structures in Haskell The University of North Carolina at Chapel Hill Spring 2002 Lecture 19: Functions, Types and Data Structures in Haskell Feb 25 1 Functions Functions are the most important kind of value in functional programming

More information

PROGRAMMING IN HASKELL. CS Chapter 6 - Recursive Functions

PROGRAMMING IN HASKELL. CS Chapter 6 - Recursive Functions PROGRAMMING IN HASKELL CS-205 - Chapter 6 - Recursive Functions 0 Introduction As we have seen, many functions can naturally be defined in terms of other functions. factorial :: Int Int factorial n product

More information

The List Datatype. CSc 372. Comparative Programming Languages. 6 : Haskell Lists. Department of Computer Science University of Arizona

The List Datatype. CSc 372. Comparative Programming Languages. 6 : Haskell Lists. Department of Computer Science University of Arizona The List Datatype CSc 372 Comparative Programming Languages 6 : Haskell Lists Department of Computer Science University of Arizona collberg@gmail.com All functional programming languages have the ConsList

More information

Shell CSCE 314 TAMU. Functions continued

Shell CSCE 314 TAMU. Functions continued 1 CSCE 314: Programming Languages Dr. Dylan Shell Functions continued 2 Outline Defining Functions List Comprehensions Recursion 3 A Function without Recursion Many functions can naturally be defined in

More information

Functional Programming I *** Functional Programming and Interactive Theorem Proving. Ulrich Berger Michaelmas Term 2006

Functional Programming I *** Functional Programming and Interactive Theorem Proving. Ulrich Berger Michaelmas Term 2006 Functional Programming I *** Functional Programming and Interactive Theorem Proving Ulrich Berger Michaelmas Term 2006 2 *** Room 306 (Faraday Tower) Phone 513380 Fax 295708 u.berger@swansea.ac.uk http://www-compsci.swan.ac.uk/

More information

A general introduction to Functional Programming using Haskell

A general introduction to Functional Programming using Haskell A general introduction to Functional Programming using Haskell Matteo Rossi Dipartimento di Elettronica e Informazione Politecnico di Milano rossi@elet.polimi.it 1 Functional programming in a nutshell

More information

PROGRAMMING IN HASKELL. Chapter 5 - List Comprehensions

PROGRAMMING IN HASKELL. Chapter 5 - List Comprehensions PROGRAMMING IN HASKELL Chapter 5 - List Comprehensions 0 Set Comprehensions In mathematics, the comprehension notation can be used to construct new sets from old sets. {x 2 x {1...5}} The set {1,4,9,16,25}

More information

ET CETERA პატრიკ ზიუსკინდი სუნამო ამბავი ერთი მკვლელისა

ET CETERA პატრიკ ზიუსკინდი სუნამო ამბავი ერთი მკვლელისა ET CETERA პატრიკ ზიუსკინდი სუნამო ამბავი ერთი მკვლელისა patrik ziuskindi sunamo ambavi erti mkvlelisa Patrick Süskind DAS PARFUM Die Geschichte eines Mörders germanulidan Targmnes natalia nadirasvilma

More information

Haske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell

Haske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell Haskell An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dk The most popular purely functional, lazy programming language Functional programming language : a program

More information

Functional Programming TDA 452, DIT 142

Functional Programming TDA 452, DIT 142 Chalmers Göteborgs Universitet 2016-04-07 Examiner: David Sands dave@chalmers.se. Answering questions on the day of the exam (at approx 15.00): Gregoire Detrez (tel: 073 55 69 550) and at other times by

More information

CSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Functions

CSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Functions 1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Functions 2 Outline Defining Functions List Comprehensions Recursion 3 Conditional Expressions As in most programming languages, functions

More information

An introduction introduction to functional functional programming programming using usin Haskell

An introduction introduction to functional functional programming programming using usin Haskell An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dkau Haskell The most popular p purely functional, lazy programming g language Functional programming language : a program

More information

Functional Programming and Haskell

Functional Programming and Haskell Functional Programming and Haskell Tim Dawborn University of Sydney, Australia School of Information Technologies Tim Dawborn Functional Programming and Haskell 1/22 What are Programming Paradigms? A programming

More information

CS 209 Functional Programming

CS 209 Functional Programming CS 209 Functional Programming Lecture 03 - Intro to Monads Dr. Greg Lavender Department of Computer Science Stanford University "The most important thing in a programming language is the name. A language

More information

Haskell-Tutorial. Damir Medak Gerhard Navratil. Institute for Geoinformation Technical University Vienna. February 2003

Haskell-Tutorial. Damir Medak Gerhard Navratil. Institute for Geoinformation Technical University Vienna. February 2003 Haskell-Tutorial Damir Medak Gerhard Navratil Institute for Geoinformation Technical University Vienna February 2003 There are numerous books on functional programming. These books are good, but usually

More information

A tour of the Haskell Prelude

A tour of the Haskell Prelude A tour of the Haskell Prelude Bernie Pope 2001 1 Haskell The Haskell language was conceived during a meeting held at the 1987 Functional Programming and Computer Architecture conference (FPCA 87). At the

More information

Haskell Overview II (2A) Young Won Lim 8/23/16

Haskell Overview II (2A) Young Won Lim 8/23/16 (2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published

More information

Lecture 1 Functional Programming

Lecture 1 Functional Programming Lecture 1 Functional Programming Roy Crole Department of Computer Science University of Leicester October 6, 2005 1 Overview of Lecture 1 From Imperative to Functional Programming: What is imperative programming?

More information

saqartvelos erovnuli angarisebi

saqartvelos erovnuli angarisebi saqartvelos statistikis erovnuli samsaxuri NATIONAL STATISTICS OFFICE OF GEORGIA saqartvelos erovnuli angarisebi NATIONAL ACCOUNTS OF GEORGIA 2013 statistikuri krebuli STATISTICAL PUBLICATION Tbilisi 2

More information

Basic types and definitions. Chapter 3 of Thompson

Basic types and definitions. Chapter 3 of Thompson Basic types and definitions Chapter 3 of Thompson Booleans [named after logician George Boole] Boolean values True and False are the result of tests are two numbers equal is one smaller than the other

More information

CS 320: Concepts of Programming Languages

CS 320: Concepts of Programming Languages CS 320: Concepts of Programming Languages Wayne Snyder Computer Science Department Boston University Lecture 08: Type Classes o o Review: What is a type class? Basic Type Classes: Eq, Ord, Enum, Integral,

More information

FUNCTIONAL PROGRAMMING 1 HASKELL BASICS

FUNCTIONAL PROGRAMMING 1 HASKELL BASICS 1 FUNCTIONAL PROGRAMMING 1 HASKELL BASICS Dr. Ahmed Sallam Reference 2 Main: Introduction to Haskell Further By Brent Yorgey Functional Programming 3 Function is the atom of the language, and can be used

More information

COSE212: Programming Languages. Lecture 3 Functional Programming in OCaml

COSE212: Programming Languages. Lecture 3 Functional Programming in OCaml COSE212: Programming Languages Lecture 3 Functional Programming in OCaml Hakjoo Oh 2017 Fall Hakjoo Oh COSE212 2017 Fall, Lecture 3 September 18, 2017 1 / 44 Why learn ML? Learning ML is a good way of

More information

Imperative languages

Imperative languages Imperative languages Von Neumann model: store with addressable locations machine code: effect achieved by changing contents of store locations instructions executed in sequence, flow of control altered

More information

Haskell Overview II (2A) Young Won Lim 8/9/16

Haskell Overview II (2A) Young Won Lim 8/9/16 (2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published

More information

Haskell Types, Classes, and Functions, Currying, and Polymorphism

Haskell Types, Classes, and Functions, Currying, and Polymorphism 1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Types, Classes, and Functions, Currying, and Polymorphism 2 Types A type is a collection of related values. For example, Bool contains the

More information

Lecture 1 August 9, 2017

Lecture 1 August 9, 2017 Programming in Haskell S P Suresh http://www.cmi.ac.in/~spsuresh Lecture 1 August 9, 2017 Administrative Mondays and Wednesdays at 9.10 am at Lecture Hall 6 Evaluation: Quizzes, 4 5 programming assignments,

More information

medioaqtivta saqceo sistemis saopozicio calebis zogierti gramatikuli da semantikuri Taviseburebis Sesaxeb

medioaqtivta saqceo sistemis saopozicio calebis zogierti gramatikuli da semantikuri Taviseburebis Sesaxeb iberiul-kavkasiuri enatmecniereba XXXVI 2008 murman suxis medioaqtivta saqceo sistemis saopozicio calebis zogierti gramatikuli da semantikuri Taviseburebis Sesaxeb Cvens samecniero literaturasi cnobilia

More information

Logical Methods in... using Haskell Getting Started

Logical Methods in... using Haskell Getting Started Logical Methods in... using Haskell Getting Started Jan van Eijck May 4, 2005 Abstract The purpose of this course is to teach a bit of functional programming and logic, and to connect logical reasoning

More information

CS 320: Concepts of Programming Languages

CS 320: Concepts of Programming Languages CS 320: Concepts of Programming Languages Wayne Snyder Computer Science Department Boston University Lecture 06: Useful Haskell Syntax, HO Programming Continued o Goodbye to Bare Bones Haskell: Built-in

More information

(ii) Define a function ulh that takes a list xs, and pairs each element with all other elements in xs.

(ii) Define a function ulh that takes a list xs, and pairs each element with all other elements in xs. EXAM FUNCTIONAL PROGRAMMING Tuesday the 1st of October 2016, 08.30 h. - 10.30 h. Name: Student number: Before you begin: Do not forget to write down your name and student number above. If necessary, explain

More information

Functional Programming for Logicians - Lecture 1

Functional Programming for Logicians - Lecture 1 Functional Programming for Logicians - Lecture 1 Functions, Lists, Types Malvin Gattinger 4 June 2018 module L1 where Introduction Who is who Course website: https://malv.in/2018/funcproglog/ Malvin Gattinger

More information

CS 457/557: Functional Languages

CS 457/557: Functional Languages CS 457/557: Functional Languages Lists and Algebraic Datatypes Mark P Jones Portland State University 1 Why Lists? Lists are a heavily used data structure in many functional programs Special syntax is

More information

Introduction to Programming: Lecture 3

Introduction to Programming: Lecture 3 Introduction to Programming: Lecture 3 K Narayan Kumar Chennai Mathematical Institute http://www.cmi.ac.in/~kumar 14 Aug 2012 Polymorphism in Haskell mylength [] = 0 mylength (x:xs) = 1 + mylength xs Polymorphism

More information

Programming Paradigms and Languages Introduction to Haskell. dr Robert Kowalczyk WMiI UŁ

Programming Paradigms and Languages Introduction to Haskell. dr Robert Kowalczyk WMiI UŁ Programming Paradigms and Languages Introduction to Haskell dr Robert Kowalczyk WMiI UŁ Functional programming In functional programming (special type of declarative programming), programs are executed

More information

Haskell Refresher Informatics 2D

Haskell Refresher Informatics 2D Haskell Purely functional! : Everything is a function Haskell Refresher Informatics 2D Kobby. K.A. Nuamah 30 January 2015 Main topics: Recursion Currying Higher-order functions List processing functions

More information

Software System Design and Implementation

Software System Design and Implementation Software System Design and Implementation Functional Programming Gabriele Keller The University of New South Wales School of Computer Science and Engineering Sydney, Australia COMP3141 16s1 Course software

More information

CSc 372 Comparative Programming Languages

CSc 372 Comparative Programming Languages CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Christian Collberg collberg+372@gmail.com Department of Computer Science University of Arizona Copyright c 2005 Christian Collberg

More information

CS 360: Programming Languages Lecture 12: More Haskell

CS 360: Programming Languages Lecture 12: More Haskell CS 360: Programming Languages Lecture 12: More Haskell Geoffrey Mainland Drexel University Adapted from Brent Yorgey s course Introduction to Haskell. Section 1 Administrivia Administrivia Homework 5 due

More information

Functional Programming TDA 452, DIT 142

Functional Programming TDA 452, DIT 142 Chalmers Göteborgs Universitet 2018-01-11 Examiner: Thomas Hallgren, D&IT, Answering questions at approx 15.00 (or by phone) Functional Programming TDA 452, DIT 142 2018-01-11 14.00 18.00 Samhällsbyggnad

More information

Haskell & functional programming, some slightly more advanced stuff. Matteo Pradella

Haskell & functional programming, some slightly more advanced stuff. Matteo Pradella Haskell & functional programming, some slightly more advanced stuff Matteo Pradella pradella@elet.polimi.it IEIIT, Consiglio Nazionale delle Ricerche & DEI, Politecnico di Milano PhD course @ UniMi - Feb

More information

CSc 372. Comparative Programming Languages. 8 : Haskell Function Examples. Department of Computer Science University of Arizona

CSc 372. Comparative Programming Languages. 8 : Haskell Function Examples. Department of Computer Science University of Arizona 1/43 CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg Functions over Lists

More information

Functional Logic Programming Language Curry

Functional Logic Programming Language Curry Functional Logic Programming Language Curry Xiang Yin Department of Computer Science McMaster University November 9, 2010 Outline Functional Logic Programming Language 1 Functional Logic Programming Language

More information

Higher Order Functions in Haskell

Higher Order Functions in Haskell Higher Order Functions in Haskell Evan Misshula 2018-09-10 Outline Curried Functions Curried comparison Example partial application partial application of a string function Returned functions ZipWith flip

More information

Haskell 101. (Version 1 (July 18, 2012)) Juan Pedro Villa Isaza

Haskell 101. (Version 1 (July 18, 2012)) Juan Pedro Villa Isaza Haskell 101 (Version 1 (July 18, 2012)) Juan Pedro Villa Isaza Haskell 101: Contents Introduction Tutorial Homework Bibliography Haskell 101: Contents Introduction Tutorial Homework Bibliography Haskell

More information

Lists. Adrian Groza. Department of Computer Science Technical University of Cluj-Napoca

Lists. Adrian Groza. Department of Computer Science Technical University of Cluj-Napoca Lists Adrian Groza Department of Computer Science Technical University of Cluj-Napoca Recall... Parameter evaluation Call-by-value Call-by-name Call-by-need Functions Infix operators Local declarations,

More information

Overloading, Type Classes, and Algebraic Datatypes

Overloading, Type Classes, and Algebraic Datatypes Overloading, Type Classes, and Algebraic Datatypes Delivered by Michael Pellauer Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. September 28, 2006 September 28, 2006 http://www.csg.csail.mit.edu/6.827

More information

Introduction to Programming, Aug-Dec 2008

Introduction to Programming, Aug-Dec 2008 Introduction to Programming, Aug-Dec 2008 Lecture 1, Monday 4 Aug 2008 Administrative matters Resource material Textbooks and other resource material for the course: The Craft of Functional Programming

More information

02157 Functional Programming Lecture 2: Functions, Basic Types and Tuples

02157 Functional Programming Lecture 2: Functions, Basic Types and Tuples Lecture 2: Functions, Basic Types and Tuples nsen 1 DTU Informatics, Technical University of Denmark Lecture 2: Functions, Basic Types and Tuples MRH 13/09/2012 Outline A further look at functions, including

More information

Getting Started with Haskell (10 points)

Getting Started with Haskell (10 points) Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.820 Foundations of Program Analysis Problem Set 1 Out: September 9, 2015 Due: September 22, 2015 at 5 PM

More information

An introduction to Scheme

An introduction to Scheme An introduction to Scheme Introduction A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize

More information

Functional Programming in Haskell Part I : Basics

Functional Programming in Haskell Part I : Basics Functional Programming in Haskell Part I : Basics Madhavan Mukund Chennai Mathematical Institute 92 G N Chetty Rd, Chennai 600 017, India madhavan@cmi.ac.in http://www.cmi.ac.in/ madhavan Madras Christian

More information

Functional Programming Mid-term exam Tuesday 3/10/2017

Functional Programming Mid-term exam Tuesday 3/10/2017 Functional Programming Mid-term exam Tuesday 3/10/2017 Name: Student number: Before you begin: Do not forget to write down your name and student number above. If necessary, explain your answers in English.

More information

INTRODUCTION TO FUNCTIONAL PROGRAMMING

INTRODUCTION TO FUNCTIONAL PROGRAMMING INTRODUCTION TO FUNCTIONAL PROGRAMMING Graham Hutton University of Nottingham adapted by Gordon Uszkay 1 What is Functional Programming? Opinions differ, and it is difficult to give a precise definition,

More information

Programming Language Concepts: Lecture 14

Programming Language Concepts: Lecture 14 Programming Language Concepts: Lecture 14 Madhavan Mukund Chennai Mathematical Institute madhavan@cmi.ac.in http://www.cmi.ac.in/~madhavan/courses/pl2009 PLC 2009, Lecture 14, 11 March 2009 Function programming

More information

Functional Programming Concepts for Data Processing

Functional Programming Concepts for Data Processing Functional Programming Concepts for Data Processing Chris Lindholm UCAR SEA 2018 1 / 70 About Me I work at CU LASP I work primarily with Scala I teach Haskell at work Goal: leverage FP to improve scientific

More information

Outline. CSE 1570 Interacting with MATLAB. Outline. Starting MATLAB. MATLAB Windows. MATLAB Desktop Window. Instructor: Aijun An.

Outline. CSE 1570 Interacting with MATLAB. Outline. Starting MATLAB. MATLAB Windows. MATLAB Desktop Window. Instructor: Aijun An. CSE 10 Interacting with MATLAB Instructor: Aijun An Department of Computer Science and Engineering York University aan@cse.yorku.ca Outline Starting MATLAB MATLAB Windows Using the Command Window Some

More information

Getting Started with Haskell (10 points)

Getting Started with Haskell (10 points) Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.827 Multithreaded Parallelism: Languages and Compilers Problem Set 1 Out: September 19, 2006 Due: October

More information

Practical Haskell. An introduction to functional programming. July 21, Practical Haskell. Juan Pedro Villa-Isaza. Introduction.

Practical Haskell. An introduction to functional programming. July 21, Practical Haskell. Juan Pedro Villa-Isaza. Introduction. Practical Practical An introduction to functional programming July 21, 2011 Contents Practical Practical is fun, and that s what it s all about! Even if seems strange to you at first, don t give up. Learning

More information

Set Haskell Exercises

Set Haskell Exercises Set Haskell Exercises Young W. Lim 2018-11-20 Tue Young W. Lim Set Haskell Exercises 2018-11-20 Tue 1 / 71 Outline 1 Based on 2 Pardoxes and Haskell type system Using STAL.hs Paradox Types and Type Classes

More information

Haskell Programs. Haskell Fundamentals. What are Types? Some Very Basic Types. Types are very important in Haskell:

Haskell Programs. Haskell Fundamentals. What are Types? Some Very Basic Types. Types are very important in Haskell: Haskell Programs We re covering material from Chapters 1-2 (and maybe 3) of the textbook. Haskell Fundamentals Prof. Susan Older A Haskell program is a series of comments and definitions. Each comment

More information

First Haskell Exercises

First Haskell Exercises First Haskell Exercises CS110 November 23, 2016 Although it is possible to install Haskell on your computer, we want to get started quickly, so we will be using an online Haskell programming system (also

More information

Lecture 4: Higher Order Functions

Lecture 4: Higher Order Functions Lecture 4: Higher Order Functions Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense September 26, 2017 HIGHER ORDER FUNCTIONS The order of a function

More information

n n Try tutorial on front page to get started! n spring13/ n Stack Overflow!

n   n Try tutorial on front page to get started! n   spring13/ n Stack Overflow! Announcements n Rainbow grades: HW1-6, Quiz1-5, Exam1 n Still grading: HW7, Quiz6, Exam2 Intro to Haskell n HW8 due today n HW9, Haskell, out tonight, due Nov. 16 th n Individual assignment n Start early!

More information

Outline. CSE 1570 Interacting with MATLAB. Starting MATLAB. Outline. MATLAB Windows. MATLAB Desktop Window. Instructor: Aijun An.

Outline. CSE 1570 Interacting with MATLAB. Starting MATLAB. Outline. MATLAB Windows. MATLAB Desktop Window. Instructor: Aijun An. CSE 170 Interacting with MATLAB Instructor: Aijun An Department of Computer Science and Engineering York University aan@cse.yorku.ca Outline Starting MATLAB MATLAB Windows Using the Command Window Some

More information

LECTURE 16. Functional Programming

LECTURE 16. Functional Programming LECTURE 16 Functional Programming WHAT IS FUNCTIONAL PROGRAMMING? Functional programming defines the outputs of a program as a mathematical function of the inputs. Functional programming is a declarative

More information

CSc 372. Comparative Programming Languages. 15 : Haskell List Comprehension. Department of Computer Science University of Arizona

CSc 372. Comparative Programming Languages. 15 : Haskell List Comprehension. Department of Computer Science University of Arizona 1/20 CSc 372 Comparative Programming Languages 15 : Haskell List Comprehension Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg 2/20 List Comprehensions

More information

Type Classes in Haskell Tom Schrijvers. Leuven Haskell User Group

Type Classes in Haskell Tom Schrijvers. Leuven Haskell User Group Type Classes in Haskell Tom Schrijvers Leuven Haskell User Group Haskell Research Team Partners Monads Type Classes GHC Folds Pattern Matching Equational Reasoning DSLs Advanced Types Adhoc Overloading

More information

INTRODUCTION TO HASKELL

INTRODUCTION TO HASKELL INTRODUCTION TO HASKELL PRINCIPLES OF PROGRAMMING LANGUAGES Norbert Zeh Winter 2018 Dalhousie University 1/81 HASKELL: A PURELY FUNCTIONAL PROGRAMMING LANGUAGE Functions are first-class values: Can be

More information

Lecture: Functional Programming

Lecture: Functional Programming Lecture: Functional Programming This course is an introduction to the mathematical foundations of programming languages and the implementation of programming languages and language-based tools. We use

More information

Defining Functions. CSc 372. Comparative Programming Languages. 5 : Haskell Function Definitions. Department of Computer Science University of Arizona

Defining Functions. CSc 372. Comparative Programming Languages. 5 : Haskell Function Definitions. Department of Computer Science University of Arizona Defining Functions CSc 372 Comparative Programming Languages 5 : Haskell Function Definitions Department of Computer Science University of Arizona collberg@gmail.com When programming in a functional language

More information

Conditionals: Making Choices

Conditionals: Making Choices Announcements ry to get help from me and tutors Reading assignment for this week: Chapters 5 and 6 of Downey Conditionals: Making Choices When you see a page on the web, be sure to reload it to see the

More information

Introduction to Programming

Introduction to Programming Introduction to Programming session 9 Instructor: Reza Entezari-Maleki Email: entezari@ce.sharif.edu 1 Fall 2010 These slides are created using Deitel s slides Sahrif University of Technology Outlines

More information

Programming Paradigms Written Exam (6 CPs)

Programming Paradigms Written Exam (6 CPs) Programming Paradigms Written Exam (6 CPs) 22.06.2017 First name Student number Last name Signature Instructions for Students Write your name and student number on the exam sheet and on every solution

More information

Companion C++ Examples

Companion C++ Examples 68 Appendix D Companion C++ Examples D.1 Introduction It is necessary to be multilingual in computer languages today. Since C++ is often used in the OOP literature it should be useful to have C++ versions

More information

Industrial Automation course

Industrial Automation course Industrial Automation course Lesson 7 PLC Structured Text Politecnico di Milano Universidad de Monterrey, July 2015, A. L. Cologni 1 Introduction The Structured Text is the higher level IEC 61131 programming

More information